<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_proxy_balancer － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body><div id="page-header">
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">模块</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：&lt;<a href="../translator_announcement.html#join">虚位以待</a>&gt; | 本篇译稿完成时间：?年?月?日</div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_proxy_balancer</h1>

<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td><code class="module"><a href="mod_proxy.html">mod_proxy</a></code>的扩展，提供负载平衡支持</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>proxy_balancer_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>proxy_balancer.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">兼容性</a></th><td>仅在 Apache 2.1 及以后的版本中可用</td></tr>
</table>
<h3>概述</h3>

    <p>This module <em>requires</em> the service of <code class="module"><a href="mod_proxy.html">mod_proxy</a></code>. It provides load balancing support for
    <code>HTTP</code>, <code>FTP</code>和<code>AJP13</code> protocols
    </p>

    <p>Thus, in order to get the ability of load balancing,
    <code class="module"><a href="mod_proxy.html">mod_proxy</a></code>和<code class="module"><a href="mod_proxy_balancer.html">mod_proxy_balancer</a></code>
    have to be present in the server.</p>

    <div class="warning"><h3>警告</h3>
      <p>在您没有<a href="mod_proxy.html#access">对您的服务器采取安全措施</a>之前，不要启用代理。开放的代理服务器对你自己的内部网络和大规模的Internet网都是有安全隐患的。</p>
    </div>
</div>
<div class="top"><a href="mod_proxy_balancer.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="scheduler" id="scheduler">Load balancer scheduler algorithm</a></h2>

    <p>At present, there are 2 load balancer scheduler algorithms available
    for use: Request Counting and Weighted Traffic Counting. These are controlled
    via the <code>lbmethod</code> value of the Balancer definition. See
    the <code class="directive"><a href="mod_proxy.html#proxy">Proxy</a></code> directive for
    more information.</p>

</div><div class="top"><a href="mod_proxy_balancer.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="requests" id="requests">Request Counting Algorithm</a></h2>

    <p>Enabled via <code>lbmethod=byrequests</code>, the idea behind this
    scheduler is that we distribute the requests among the
    various workers to ensure that each gets their configured share
    of the number of requests. It works as follows:</p>

    <p><dfn>lbfactor</dfn> is <em>how much we expect this worker
    to work</em>, or <em>the workers's work quota</em>. This is
    a normalized value representing their "share" of the amount of
    work to be done.</p>

    <p><dfn>lbstatus</dfn> is <em>how urgent this worker has to work
    to fulfill its quota of work</em>.</p>

    <p><dfn>worker</dfn> is a member of the load balancer,
    usually a remote host serving one of the supported protocols.</p>

    <p>We distribute each worker's work quota to the worker, and then look
    which of them needs to work most urgently (biggest lbstatus).  This
    worker is then selected for work, and its lbstatus reduced by the
    total work quota we distributed to all workers.  Thus the sum of all
    lbstatus does not change(*) and we distribute the requests
    as desired.</p>

    <p>If some workers are disabled, the others will
    still be scheduled correctly.</p>

    <div class="example"><pre><code>for each worker in workers
    worker lbstatus += worker lbfactor
    total factor    += worker lbfactor
    if worker lbstatus &gt; candidate lbstatus
        candidate = worker

candidate lbstatus -= total factor</code></pre></div>

    <p>If a balancer is configured as follows:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">25</td><td class="data">25</td><td class="data">25</td><td class="data">25</td></tr>
<tr><th>lbstatus</th><td class="data">0</td><td class="data">0</td><td class="data">0</td><td class="data">0</td></tr>
</table>

    <p>And <var>b</var> gets disabled, the following schedule is produced:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbstatus</th><td class="data"><em>-50</em></td><td class="data">0</td><td class="data">25</td><td class="data">25</td></tr>
<tr><th>lbstatus</th><td class="data">-25</td><td class="data">0</td><td class="data"><em>-25</em></td><td class="data">50</td></tr>
<tr><th>lbstatus</th><td class="data">0</td><td class="data">0</td><td class="data">0</td><td class="data"><em>0</em></td></tr>
<tr><td class="data" colspan="5">(repeat)</td></tr>
</table>

    <p>That is it schedules: <var>a</var> <var>c</var> <var>d</var>
    <var>a</var> <var>c</var> <var>d</var> <var>a</var> <var>c</var>
    <var>d</var> ... Please note that:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">25</td><td class="data">25</td><td class="data">25</td><td class="data">25</td></tr>
</table>

    <p>Has the exact same behavior as:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">1</td><td class="data">1</td><td class="data">1</td></tr>
</table>

    <p>This is because all values of <dfn>lbfactor</dfn> are normalized
    with respect to the others. For:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">4</td><td class="data">1</td></tr>
</table>

    <p>worker <var>b</var> will, on average, get 4 times the requests
    that <var>a</var>和<var>c</var> will.</p>

    <p>The following asymmetric configuration works as one would expect:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th></tr>
<tr><th>lbfactor</th><td class="data">70</td><td class="data">30</td></tr>
<tr><td class="data" colspan="2">&nbsp;</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-30</em></td><td class="data">30</td></tr>
<tr><th>lbstatus</th><td class="data">40</td><td class="data"><em>-40</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>10</em></td><td class="data">-10</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-20</em></td><td class="data">20</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-50</em></td><td class="data">50</td></tr>
<tr><th>lbstatus</th><td class="data">20</td><td class="data"><em>-20</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>-10</em></td><td class="data">10</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-40</em></td><td class="data">40</td></tr>
<tr><th>lbstatus</th><td class="data">30</td><td class="data"><em>-30</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>0</em></td><td class="data">0</td></tr>
<tr><td class="data" colspan="3">(repeat)</td></tr>
</table>

    <p>That is after 10 schedules, the schedule repeats and 7 <var>a</var>
    are selected with 3 <var>b</var> interspersed.</p>
</div><div class="top"><a href="mod_proxy_balancer.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="traffic" id="traffic">Weighted Traffic Counting Algorithm</a></h2>

    <p>Enabled via <code>lbmethod=bytraffic</code>, the idea behind this
    scheduler is very similar to the Request Counting method, with
    the following changes:</p>

    <p><dfn>lbfactor</dfn> is <em>how much traffic, in bytes, we want
    this worker to handle</em>. This is also a normalized value
    representing their "share" of the amount of work to be done,
    but instead of simply counting the number of requests, we take
    into account the amount of traffic this worker has seen.</p>

    <p>If a balancer is configured as follows:</p>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">2</td><td class="data">1</td></tr>
</table>

    <p>Then we mean that we want <var>b</var> to process twice the
    amount of bytes than <var>a</var>或<var>c</var> should. It does
    not necessarily mean that <var>b</var> would handle twice as
    many requests, but it would process twice the I/O. Thus, the
    size of the request and response are applied to the weighting
    and selection algorithm.</p>

</div><div class="top"><a href="mod_proxy_balancer.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="enable" id="enable">Enabling Balancer Manager Support</a></h2>

    <p>This module <em>requires</em> the service of
    <code class="module"><a href="mod_status.html">mod_status</a></code>.
    Balancer manager enables dynamic update of balancer
    members. You can use balancer manager to change the balance
    factor or a particular member, or put it in the off line
    mode.
    </p>

    <p>Thus, in order to get the ability of load balancer management,
    <code class="module"><a href="mod_status.html">mod_status</a></code>和<code class="module"><a href="mod_proxy_balancer.html">mod_proxy_balancer</a></code>
    have to be present in the server.</p>

    <p>To enable load balancer management for browsers from the foo.com
    domain add this code to your <code>httpd.conf</code>
    configuration file</p>
<div class="example"><p><code>
    &lt;Location /balancer-manager&gt;<br />
    SetHandler balancer-manager<br />
<br />
    Order Deny,Allow<br />
    Deny from all<br />
    Allow from .foo.com<br />
    &lt;/Location&gt;
</code></p></div>

    <p>You can now access load balancer manager by using a Web browser
    to access the page
    <code>http://your.server.name/balancer-manager</code></p>
</div>
</div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
